'''
官网地址：https://www.biqukan.la/
选择一个类别，如玄幻小说

爬取目标：
玄幻小说类别下前五页的
小说链接
小说名称
小说作者
小说描述

https://www.biqukan.la/fenlei1/1.html
https://www.biqukan.la/fenlei1/2.html
'''
import requests
import re
import time
import random
import pymysql
class Biqukan:
    def __init__(self):
        '''初始化方法'''
        self.url = "https://www.biqukan.la/fenlei1/{}.html"
        self.headers ={
            "User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36"
        }
        self.db = pymysql.connect(host='localhost',user='root',password='73327233',db='zjlg',charset='utf8')
        self.cur = self.db.cursor()#获取执行sql语句的对象

    def get_html(self,url):
        html = requests.get(url=url,headers = self.headers).text
        print(html)
        #直接调用解析页面的函数
        self.parse_html(html)

    def parse_html(self,html):
        regex = """<div class="caption"><h4><a href="(.*?)" title="(.*?)">.*?<small class="text-muted fs-12">(.*?)</small><p class="text-muted fs-12 hidden-xs">(.*?)</p></div>"""
       # [（(链接)，（名称），（作者），（简述）），（小说2），（小说3）]
        r_list = re.findall(regex,html,re.S)
        self.save_html(r_list)#直接调用保存数据的函数

    def save_html(self,r_list):
        for r in r_list:
            # [('...','水浒传','施耐庵','少不读水浒，老不读三国'),(),()...]
            self.save_to_mysql(r)
            print(r,"抓取成功！")


    def save_to_mysql(self,r):
        '''保存数据到mysql数据库'''
        ins = 'insert into novel values(%s,%s,%s,%s)'#准备sql
        one_novel_li=[
            r[1].strip(),#名称
            r[0].strip(),#连接
            r[2].strip(),
            r[3].strip()
        ]#准备数据
        self.cur.execute(ins,one_novel_li)#执行sql
        self.db.commit()#提交

    def run(self):
        for page in range(1,6):
            page_url = self.url.format(page)
            self.get_html(url=page_url)
            time.sleep(random.randint(1,3))
        self.cur.close()#循环结束后关闭连接
        self.db.close()#循环结束后关闭连接
if __name__ == '__main__':
    test = Biqukan()
    test.run()